home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-0015 / flicker / zoom.asm < prev    next >
Assembly Source File  |  1997-04-16  |  4KB  |  148 lines

  1.     ;    :ts = 10        make z editor give me 10 for tabstop
  2.  
  3.     public _zoomtab        ; lookup table for zoom in another file 
  4.  
  5.     ;zoom(source, dest, x, y)
  6.     ;    routine to do a 4x blow up of the source onto the dest.
  7.     ;    The dest is assumed to be 32K.  The source is also 32K
  8.     ;    However I zoom starting at the position x,y ...
  9.  
  10.     public _zoom
  11. _zoom
  12.     move.l    4(sp),a0    ; source in a0
  13.     move.l    8(sp),a1    ; dest in a1
  14.     move.w    12(sp),d0    ; x in d0
  15.     move.w    14(sp),d1    ; y in d1
  16.     movem.l    a2/d2/d3,-(sp)    ; sorry got to trash some registers
  17.     mulu    #160,d1        ; convert y to line offset
  18.     add.l    d1,a0
  19.     and.w    #$fff0,d0    ; just word-alligned source please !
  20.     lsr.w    #1,d0        ; convert it from pixels to bytes
  21.     add.w    d0,a0        ; a0 now has first word of dest to zoom!
  22.     move.l    #_zoomtab,a2    ; keep pointer to lookup table in register
  23.     move.w    #49,d2        ; dbra counter = YMAX/2 - 1
  24. zline
  25.     move.w    #4,d3        ; word counter
  26. zword
  27.     move.w    #0,d0
  28.     move.b    (a0)+,d0
  29.     lsl.w    #2,d0
  30.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  31.     move.w    d1,0*160+0+0+0(a1)
  32.     move.w    d1,1*160+0+0+0(a1)
  33.     move.w    d1,2*160+0+0+0(a1)
  34.     move.w    d1,3*160+0+0+0(a1)
  35.     swap    d1
  36.     move.w    d1,0*160+0+0+8(a1)
  37.     move.w    d1,1*160+0+0+8(a1)
  38.     move.w    d1,2*160+0+0+8(a1)
  39.     move.w    d1,3*160+0+0+8(a1)
  40.  
  41.     move.w    #0,d0
  42.     move.b    (a0)+,d0
  43.     lsl.w    #2,d0
  44.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  45.     move.w    d1,0*160+0+16+0(a1)
  46.     move.w    d1,1*160+0+16+0(a1)
  47.     move.w    d1,2*160+0+16+0(a1)
  48.     move.w    d1,3*160+0+16+0(a1)
  49.     swap    d1
  50.     move.w    d1,0*160+0+16+8(a1)
  51.     move.w    d1,1*160+0+16+8(a1)
  52.     move.w    d1,2*160+0+16+8(a1)
  53.     move.w    d1,3*160+0+16+8(a1)
  54.  
  55.     move.w    #0,d0
  56.     move.b    (a0)+,d0
  57.     lsl.w    #2,d0
  58.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  59.     move.w    d1,0*160+2+0+0(a1)
  60.     move.w    d1,1*160+2+0+0(a1)
  61.     move.w    d1,2*160+2+0+0(a1)
  62.     move.w    d1,3*160+2+0+0(a1)
  63.     swap    d1
  64.     move.w    d1,0*160+2+0+8(a1)
  65.     move.w    d1,1*160+2+0+8(a1)
  66.     move.w    d1,2*160+2+0+8(a1)
  67.     move.w    d1,3*160+2+0+8(a1)
  68.  
  69.     move.w    #0,d0
  70.     move.b    (a0)+,d0
  71.     lsl.w    #2,d0
  72.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  73.     move.w    d1,0*160+2+16+0(a1)
  74.     move.w    d1,1*160+2+16+0(a1)
  75.     move.w    d1,2*160+2+16+0(a1)
  76.     move.w    d1,3*160+2+16+0(a1)
  77.     swap    d1
  78.     move.w    d1,0*160+2+16+8(a1)
  79.     move.w    d1,1*160+2+16+8(a1)
  80.     move.w    d1,2*160+2+16+8(a1)
  81.     move.w    d1,3*160+2+16+8(a1)
  82.  
  83.     move.w    #0,d0
  84.     move.b    (a0)+,d0
  85.     lsl.w    #2,d0
  86.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  87.     move.w    d1,0*160+4+0+0(a1)
  88.     move.w    d1,1*160+4+0+0(a1)
  89.     move.w    d1,2*160+4+0+0(a1)
  90.     move.w    d1,3*160+4+0+0(a1)
  91.     swap    d1
  92.     move.w    d1,0*160+4+0+8(a1)
  93.     move.w    d1,1*160+4+0+8(a1)
  94.     move.w    d1,2*160+4+0+8(a1)
  95.     move.w    d1,3*160+4+0+8(a1)
  96.  
  97.     move.w    #0,d0
  98.     move.b    (a0)+,d0
  99.     lsl.w    #2,d0
  100.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  101.     move.w    d1,0*160+4+16+0(a1)
  102.     move.w    d1,1*160+4+16+0(a1)
  103.     move.w    d1,2*160+4+16+0(a1)
  104.     move.w    d1,3*160+4+16+0(a1)
  105.     swap    d1
  106.     move.w    d1,0*160+4+16+8(a1)
  107.     move.w    d1,1*160+4+16+8(a1)
  108.     move.w    d1,2*160+4+16+8(a1)
  109.     move.w    d1,3*160+4+16+8(a1)
  110.  
  111.     move.w    #0,d0
  112.     move.b    (a0)+,d0
  113.     lsl.w    #2,d0
  114.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  115.     move.w    d1,0*160+6+0+0(a1)
  116.     move.w    d1,1*160+6+0+0(a1)
  117.     move.w    d1,2*160+6+0+0(a1)
  118.     move.w    d1,3*160+6+0+0(a1)
  119.     swap    d1
  120.     move.w    d1,0*160+6+0+8(a1)
  121.     move.w    d1,1*160+6+0+8(a1)
  122.     move.w    d1,2*160+6+0+8(a1)
  123.     move.w    d1,3*160+6+0+8(a1)
  124.  
  125.     move.w    #0,d0
  126.     move.b    (a0)+,d0
  127.     lsl.w    #2,d0
  128.     move.l    0(a2,d0.w),d1    ; preswapped long-word in d1
  129.     move.w    d1,0*160+6+16+0(a1)
  130.     move.w    d1,1*160+6+16+0(a1)
  131.     move.w    d1,2*160+6+16+0(a1)
  132.     move.w    d1,3*160+6+16+0(a1)
  133.     swap    d1
  134.     move.w    d1,0*160+6+16+8(a1)
  135.     move.w    d1,1*160+6+16+8(a1)
  136.     move.w    d1,2*160+6+16+8(a1)
  137.     move.w    d1,3*160+6+16+8(a1)
  138.  
  139.     adda.w    #32,a1        
  140.     dbra    d3,zword
  141.  
  142.     adda.w    #120,a0    ; skip over to next line of source
  143.     adda.w    #160*3,a1 ; skip 3 lines of dest
  144.     dbra    d2,zline
  145.  
  146.     movem.l    (sp)+,d2/d3/a2
  147.     rts
  148.